package model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import state.implementacoes.Aguardando;
import state.implementacoes.Cadastrando;
import state.implementacoes.Comprando;
import state.implementacoes.Confirmado;
import state.implementacoes.Falido;
import state.implementacoes.Jogando;
import state.implementacoes.Preso;
import state.interfaces.State;
import strategy.modelos.Campo;

/**
 * @author Lucas -- Objeto jogador
 *
 */
public class Jogador implements Serializable {
    private long id; //Nao utilizado...
    private String name;
    private String color;
    private double money;
    private String ip; //Nao utilizado...
    private int local = 0;
    private boolean minhaVez = false;
    private boolean cartaSairPrisao = false;
    private int vezesPrisao = 0;
    private int vezesDados = 0; //Nao utilizado... nao funcionou..
    private List<Campo> listaCampos;
    //Estados do jogador....
    private State aguardando;
    private State cadastrando;
    private State comprando;
    private State confirmando;
    private State falido;
    private State jogando;
    private State preso;
    private State state = aguardando;

    public Jogador() {
        listaCampos = new ArrayList<Campo>();

        //setando os states...
        aguardando = new Aguardando(this);
        cadastrando = new Cadastrando(this);
        comprando = new Comprando(this);
        confirmando = new Confirmado(this);
        falido = new Falido(this);
        jogando = new Jogando(this);
        preso = new Preso(this);
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public int getLocal() {
        return local;
    }

    public void setLocal(int local) {
        this.local = local;
    }

    public List<Campo> getListaCampos() {
        return listaCampos;
    }

    public void setListaCampos(List<Campo> listaCampos) {
        this.listaCampos = listaCampos;
    }

    public State getAguardando() {
        return aguardando;
    }

    public State getCadastrando() {
        return cadastrando;
    }

    public State getComprando() {
        return comprando;
    }

    public State getConfirmando() {
        return confirmando;
    }

    public State getFalido() {
        return falido;
    }

    public State getJogando() {
        return jogando;
    }

    public State getPreso() {
        return preso;
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }

    //Alterando os state
    public void comprar() {
        state.comprar();
    }

    public void vender() {
        state.vender();
    }

    public void lancarDados(int dadoUm, int dadoDois) {
        state.lancarDados(dadoUm, dadoDois);
    }

    public String cadatrar() {
        state = cadastrando;
        String str = state.cadastrar();
        return str;
    }

    public void confirmar() {
        state = confirmando;
    }

    public void jogando() {
        state = jogando;
    }

    public void aguardando() {
        state = aguardando;
    }

    public void comprando() {
        state = comprando;
    }

    public void adicionarCampo(Campo c) {
        listaCampos.add(c);
    }
    
    public void removerCampo(Campo c) {
        listaCampos.remove(c);
    }

    public boolean isMinhaVez() {
        return minhaVez;
    }

    public void setMinhaVez(boolean minhaVez) {
        this.minhaVez = minhaVez;
    }

    public void preso() {
        state = preso;
        setLocal(10);
    }

    public int getVezesPrisao() {
        return vezesPrisao;
    }

    public void setVezesPrisao(int vezesPrisao) {
        this.vezesPrisao = vezesPrisao;
    }

    public boolean isCartaSairPrisao() {
        return cartaSairPrisao;
    }

    public void setCartaSairPrisao(boolean cartaSairPrisao) {
        this.cartaSairPrisao = cartaSairPrisao;
    }

    /*
     * Nao esta funcionando...
     */
    public int getVezesDados() {
        return vezesDados;
    }

    public void setVezesDados(int vezesDados) {
        this.vezesDados = vezesDados;
    }

    public void incrementeVezesDados() {
        vezesDados++;
    }

    public void falido() {
        state = falido;
    }
}
